// pages/cart/index.ts
import { getSetting, chooseAddress, openSetting, showModal ,showToast} from "../../utils/asyncWx.js";
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address: {},
    cart: [],
    allChecked: false,
    totalPrice: 0,
    totalNum: 0
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onShow() {
    let address = wx.getStorageSync('address')
    this.setData({
      address: address
    })
    // 1.获取缓存中的购物车数据
    const cart = wx.getStorageSync("cart") || []
    this.setData({
      address
    });
    this.setCart(cart);
  },
  // 跳转选择收货地址
  onChooseAddress() {
    wx.chooseAddress({
      success: (result) => {
        console.log(result)
        wx.setStorageSync('address', result)
      },
      fail: (res) => {},
      complete: (res) => {},
    })
  },
  onLoad() {
    const cart = wx.getStorageSync("cart") || []
    /* 2.计算全选 
     every数组方法：会遍历接收一个回调函数，如果确保每一个回调函数都返回true，那么every方法的返回值为true；
     只要有一个回调函数返回false，那么不再执行循环直接返回false，空数组调用every，返回值是true */
    const allChecked = cart.length ? cart.every(v => v.checked) : false;
    // 3.给data赋值
    this.setData({
      cart,
      allChecked
    })
  },
  handleItemChange(e) {
    // 获取被修改的商品的id
    const goods_id = e.currentTarget.dataset.id;
    // console.log(goods_id);
    // 获取购物车数组
    let {
      cart
    } = this.data;
    // 找到被修改的商品对象
    let index = cart.findIndex(v => v.goods_id === goods_id);
    // 选中状态取反
    cart[index].checked = !cart[index].checked;
    // 把购物车数据重新设置回data中和缓存中
    this.setCart(cart);
  },
  setCart(cart) {
    let allChecked = true;
    // 总价格和总数量
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v => {
      if (v.checked) {
        totalPrice += v.num * v.goods_price;
        totalNum += v.num;
      } else {
        allChecked = false;
      }
    })
    // 判断数组是否为空
    allChecked = cart.length != 0 ? allChecked : false;
    // 2.给data赋值
    this.setData({
      cart,
      allChecked,
      totalPrice,
      totalNum
    })
    // 把购物车数据重新设置回data中和缓存中
    wx.setStorageSync("cart", cart);
  },
  handleItemAlCheck() {
    // 获取data中的数据
    let {
      cart,
      allChecked
    } = this.data;
    // 修改值
    allChecked = !allChecked;
    // 循环修改cart数组中的商品选中状态
    cart.forEach(v => v.checked = allChecked);
    // 把修改后的值填充回data或者缓存中
    this.setCart(cart);
  },

  async handleItemNumEdit(e) {
    // 获取传递过来的参数
    const {
      operation,
      id
    } = e.currentTarget.dataset;
    // console.log(operation,id);
    // 获取购物车数组
    let {
      cart
    } = this.data;
    // 找到需要修改的商品的索引
    const index = cart.findIndex(v => v.goods_id === id);
    // 判断是否要执行删除
    if (cart[index].num === 1 && operation === -1) {
      // 弹窗提示
      const res = await showModal({
        content: '您是否要删除？'
      });
      if (res.confirm) {
        cart.splice(index, 1);
        this.setCart(cart);
      }
    } else {
      // 进行修改数量
      cart[index].num += operation;
      // 设置回缓存和data中
      this.setCart(cart);
    }
  },

  async hanlePay() {
    //  判断收货地址
    const {
      address,
      totalNum
    } = this.data;
    if (!address.userName) {
      await showToast({
        title: "您还没有选择收货地址"
      });
      return;
    }
    // 判断用户有没有选购商品
    if (totalNum === 0) {
      await showToast({
        title: "您还没有选购商品"
      });
      return;
    }
    // 跳转到支付页面
    wx.navigateTo({
      url: '/pages/pay/index',
    });
  },



  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})